package Solutions;

/**
 * @Classname VerifyPalindromeString
 * @Description TODO
 * @Date 2021/6/12 12:15
 * @Created by LengDanran
 * 给定一个字符串，验证它是否是回文串，只考虑字母和数字字符，可以忽略字母的大小写。
 *
 * 说明：本题中，我们将空字符串定义为有效的回文串。
 *
 * 示例 1:
 *
 * 输入: "A man, a plan, a canal: Panama"
 * 输出: true
 *
 * 示例 2:
 *
 * 输入: "race a car"
 * 输出: false
 *
 * 作者：力扣 (LeetCode)
 * 链接：https://leetcode-cn.com/leetbook/read/top-interview-questions/xah8k6/
 * 来源：力扣（LeetCode）
 * 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
 */
public class VerifyPalindromeString {


    public boolean isPalindrome(String str) {
        str = str.trim().toLowerCase();
        System.out.println(str);
        char[] chars = str.toCharArray();
        int left = 0, right = chars.length - 1;
        while (left < right) {
            while (judge(chars[left]) && left < right) left++;
            while (judge(chars[right]) && right > left) right--;
            if (chars[left] == chars[right]) {
                left++;
                right--;
            } else {
                return false;
            }
        }
        return true;
    }

    private boolean judge(char ch) {
        return ch < 'a' || ch > 'z';
    }

    public static void main(String[] args) {
        System.out.println(new VerifyPalindromeString().isPalindrome("A man, a plan, a canal: Panama"));
    }

}
